SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE [dbo].[paEjecutarRectificacionAltaDeServicio]
@idCola INT,
@Norma INT = NULL,
@SubServicioDeLaNorma INT OUTPUT,
@EsForzado BIT
 AS
-- <ACTUALIZACIONES> 05 - 04 -2006 por  SANES, Jorge. (Agregamos ELSE GOTO SALIR si encuentra Subservicios <> NR en el servicio a Borrar )
-- <ACTUALIZACIONES> 13 - 06 -2006 por  SANES, Jorge. (Se agrego la Rectificacion de A Titularizar)
-- <ACTUALIZACIONES> 23 - 10 -2006 por  SANES, Jorge y OTERO, Javier. (Se agrega que actualice tambien la norma de baja cuando se rectifica una alta con baja y tiene que asignar numero de norma)
-- <ACTUALIZACIONES> 10 - 05 -2007 por  FIORUCCI, Adriana y SANES, Jorge  (Se cambio el lugar de donde se toma la Causa de Alta rectificada, ahora desde la Tb_PlazasDeMovimiento)
-- <ACTUALIZACIONES> 10 - 05 -2007 por  FIORUCCI, Adriana y SANES, Jorge  (Se agrego control para que no actualice la Norma de Alta y Baja si no corresponde)
-- <ACTUALIZACIONES> 15 - 05 -2007 por  FIORUCCI, Adriana y SANES, Jorge  (Se agrego control cuando intenta borrar el servicio para que no existan varios subservicios)
-- <ACTUALIZACIONES> 06 - 05 - 2009 por OTERO, Marcelo y SANES,  Jorge, Se agrego Manejo de Transacciones 


-- TEMAS
-- OJO con las normas de inicio y fin en los subservicios
-- OJO con la Norma de Alta cuando no Asignan un nuevo numero, tambien la de baja, actualiza las dos con 0 me parece
-- OJO ver el tema de Mantener las horas del Servicio
-- OJO con @normaaltaanterior lo usa pero no lo declara queda fuera del IF donde esta declarada esta variable y la utiliza para un Update, Y TAMPOCO SE MUESTRA EN NINGUN LADO

------- ESTO ES UN QUILOMBO

SET NOCOUNT ON

-- Atributos del subservicio a guardar  (tbSubServiciosRectificados) o elminar.
DECLARE @ServicioAgente INT
DECLARE @NroOrden INT
DECLARE @FechaAlta DATETIME
DECLARE @Baja VARCHAR(1)
DECLARE @FechaBaja DATETIME
DECLARE @FechaTermino DATETIME
DECLARE @Movimiento INT
DECLARE @TramiteAlta INT
DECLARE @TramiteBaja INT
DECLARE @NormaInicio INT
DECLARE @NormaFin INT
DECLARE @Plaza INT
DECLARE @SituacionLaboral INT
DECLARE @SituacionExtraordinaria INT
DECLARE @Nivel INT
DECLARE @Modalidad INT
DECLARE @Zona INT
DECLARE @Licencia INT
DECLARE @CodEnfermedad INT
DECLARE @EntidadCertificadora INT
DECLARE @NroCertificado INT
DECLARE @FechaCertificado DATETIME
DECLARE @EstadoLiqExt INT
DECLARE @idSubServicio INT
DECLARE @Error INT
DECLARE @Diagnostico VARCHAR(300)
DECLARE @Servicio INT

-- Atributos del SS Licencia a insertar en la cola
DECLARE @Agente INT
DECLARE @PlazaC INT
DECLARE @Fecha DATETIME
DECLARE @Organizacion INT
DECLARE @REsponsable INT
DECLARE @Fecha1 DATETIME
DECLARE @Fecha2 DATETIME
DECLARE @FechaTerminoC DATETIME
DECLARE @SitRev INT
DECLARE @NivelC INT
DECLARE @modalidadC INT
DECLARE @zonaC INT
DECLARE @cargosalarial INT
DECLARE @LicenciaC INT
DECLARE @cantidadhoras INT
DECLARE @movimientoC INT
DECLARE @estado INT
DECLARE @observaciones VARCHAR(255)
DECLARE @CausaAlta INT
DECLARE @borrar VARCHAR(1)
--DECLARE @Diagnostico VARCHAR(1000)
DECLARE @Destino INT
DECLARE @NormaAlta INT
-- Agregado 13-06-2006
DECLARE @MovimientoATitularizar VARCHAR(1)
DECLARE @NormaBaja INT
DECLARE @NormaAltaAnterior VARCHAR(50)
DECLARE @NormaBajaServicio INT 
DECLARE @IDSubServicioConLicencia INT 
DECLARE @FechaAltaSubServicioLicencia DATETIME 

BEGIN TRANSACTION tranRectificarAltaDeServicios

SET @Error = 0

--Saco los valores de la ColaDeMovimientos correspondientes a idCola
SELECT @Agente = Agente, @PlazaC = Plaza, @Fecha = Fecha, @Organizacion = Organizacion, @Responsable = Responsable, @Fecha1 = Fecha1,
	@Fecha2 = Fecha2, @SitRev = SitRev, @NivelC = Nivel, @ModalidadC = Modalidad, @ZonaC = Zona, @cargosalarial = cargosalarial, @licenciaC = licencia,
	@cantidadhoras = cantidadhoras, @movimientoC = movimiento, @Estado = Estado, @Observaciones = observaciones, -- @CausaAlta = CausaAlta, Sacado 10/05/07
	@FechaTerminoC = FechaTermino
	FROM Tb_ColaDeMovimientos 
	WHERE idCola = @idCola

-- Obtengo el subservicio a rectificar
-- Agregado 13-06-2006
-- SELECT  @idSubServicio = RectificaA, @borrar=borrar, @MovimientoATitularizar=Titularizar, @CausaAlta = CausaAlta --  @CausaAlta = CausaAlta  Agregado10/05/07
SELECT @Servicio = IDServicioBase, @idSubServicio = RectificaA,  @borrar=borrar, @MovimientoATitularizar=Titularizar, @CausaAlta = CausaAlta --  @CausaAlta = CausaAlta  Agregado10/05/07
	 FROM tb_PlazasDeMovimiento
	 WHERE idCola = @idCola  

-- Solo si se trata de un Movimiento viejo que no tiene IDServicioBase lo tomo por aqui.
IF @Servicio IS NULL 
     SELECT @Servicio = ServicioAgente FROM tb_SubServiciosAgentes WHERE idSubServicio = @idSubServicio

-- Primero extraigo todos los valores del SubServicio que se va a rectificar.
SELECT TOP 1 @ServicioAgente = Servicioagente, @idSubServicio = IdSubServicio, @NroOrden = NroOrden9, @FechaAlta = FechaAlta, @FechaBaja = Fechabaja,@FechaTermino = FechaTermino, @Movimiento = Movimiento,
	@TramiteAlta = TramiteAlta, @TramiteBaja = TramiteBaja, @NormaInicio = NormaInicio, @NormaFin = NormaFin, @Plaza = Plaza, @SituacionLaboral = SituacionLaboral,
	@SituacionExtraordinaria = SituacionExtraordinaria, @Nivel = Nivel, @Modalidad = Modalidad, @Zona = Zona, @Licencia = Licencia, @CodEnfermedad = CodEnfermedad,
	@NroCertificado = NroCertificado, @EntidadCertificadora = EntidadCertificadora, @FechaCertificado = FechaCertificado, @EstadoLiqExt = EstadoLiqExt
	FROM tb_SubServiciosAgentes
 	WHERE ServicioAgente = @Servicio
	ORDER BY FechaAlta

-- Si el Estado es Rechazado, Ejecutado o Ejecutado Forzado
IF @Estado = 2 OR @Estado = 4 OR @Estado = 5 OR @Servicio IS NULL OR @IdSubServicio IS NULL 
	RETURN

-- Inicializamos @NormaBaja 10-05-2007
SET @NormaBaja = NULL 
-- El parametro norma tiene valor y viene la Fecha de Baja.
IF @Norma IS NOT NULL AND @Fecha2 IS NOT NULL
	SELECT @NormaBaja  = @Norma

IF @Borrar = 'S'
  BEGIN
	-- Si solo existen periodos normales posteriores o solo el alta		
	--IF NOT EXISTS(SELECT * FROM Tb_SubServiciosAgentes WHERE ServicioAgente = @Servicio and FechaAlta > @FechaAlta and situacionlaboral <> 5 and situacionextraordinaria<>1) - Cambio 
	IF NOT EXISTS(SELECT top 1 ServicioAgente FROM Tb_SubServiciosAgentes WHERE ServicioAgente = @Servicio AND (SituacionLaboral <> 5 OR SituacionExtraordinaria<>1))
	   BEGIN
		DELETE FROM tb_SubServiciosAgentes WHERE ServicioAgente = @Servicio
		SELECT @Error = @@ERROR
		IF @Error <> 0
			GOTO SALIR

		DELETE FROM tb_ServiciosAgentes WHERE idservicioAgente = @Servicio
		SELECT @Error = @@ERROR
		IF @Error <> 0
			GOTO SALIR
	   END
	ELSE
		GOTO SALIR
  END
ELSE
  BEGIN
	IF NOT EXISTS( SELECT top 1 ServicioAgente FROM Tb_SubServiciosAgentes WHERE ServicioAgente = @Servicio AND (SituacionLaboral <> 5 OR SituacionExtraordinaria<>1) )   	
	     BEGIN 
		-- Borrar todos los Subservicios Normales menos el Actualizado
   		DELETE Tb_SubServiciosAgentes  WHERE ServicioAgente=@Servicio AND IdSubServicio <> @IdSubServicio
		SELECT @Error = @@ERROR
		IF @Error <> 0
			GOTO SALIR

		SET @NormaBajaServicio = (SELECT NormaBaja FROM Tb_ServiciosAgentes WHERE IdServicioAgente = @Servicio)
		IF @NormaBajaServicio <> NULL
		      BEGIN
			UPDATE Tb_SubServiciosAgentes SET NormaFin = @NormaBajaServicio  WHERE  IdSubServicio = @IdSubServicio
			SELECT @Error = @@ERROR
			IF @Error <> 0
				GOTO SALIR
		      END
	      END
	ELSE
	      -- Si Existen SubServicios con Licencias 
	      BEGIN
		 ---- Buscamos el primer subservicio con Licencias 
		SELECT TOP 1 @FechaAltaSubServicioLicencia = FechaAlta,  @IDSubServicioConLicencia=IdSubServicio
			FROM Tb_SubserviciosAgentes
			WHERE ServicioAgente = @Servicio 
				AND SituacionLaboral <> 5
				AND Licencia IS NOT NULL 
			ORDER BY FechaAlta
		----- Si el primer subservicio es una licencia y se quiere rectificar el alta con una fecha menor
		IF @idSubServicio = @IDSubServicioConLicencia AND @Fecha1 < @FechaAltaSubServicioLicencia
			BEGIN 
 				INSERT INTO Tb_SubServiciosAgentes (Baja, CodEnfermedad, EntidadCertificadora, EstadoLiqExt, FechaAlta, FechaBaja, FechaCertificado,
					FechaTermino, Licencia, Modalidad, Movimiento, Nivel, NormaFin, NormaInicio, NroCertificado, NroOrden9, Plaza, ServicioAgente, SituacionExtraordinaria,
					SituacionLaboral, TramiteAlta, TramiteBaja, Zona, NormaTemporal)	
					VALUES ('S', 0, 1, 1, @Fecha1, DATEADD(DAY,-1,@FechaAltaSubServicioLicencia), NULL, @FechaTermino, NULL, @Modalidad, 1,@Nivel, NULL, @NormaInicio, NULL, 1, @Plaza, @Servicio, 1,
					5, NULL, NULL, @Zona, NULL)
				SELECT @Error = @@ERROR
				IF @Error <> 0
					GOTO SALIR
				SET @IdSubServicio = @@IDENTITY
			END
		
 		IF @FechaAltaSubServicioLicencia IS NOT NULL AND @Fecha1 = @FechaAltaSubServicioLicencia
		        BEGIN 
			DELETE Tb_SubServiciosAgentes WHERE  ServicioAgente=@Servicio AND FechaAlta < @Fecha1
			SELECT @Error = @@ERROR
			IF @Error <> 0
				GOTO SALIR
			SET @IdSubServicio = @IDSubServicioConLicencia
		        END 

	      END 


	-- Actualizar Servicio 
	UPDATE Tb_ServiciosAgentes SET FechaAlta = @Fecha1, SituacionRevista = @SitRev, Horas = @CantidadHoras, FechaTermino = @FechaTermino,  CausaAlta =@CausaAlta,  EstaEnProcesoDeTitularizacion=@MovimientoATitularizar WHERE IdServicioAgente = @Servicio
	SELECT @Error = @@ERROR
	IF @Error <> 0
		GOTO SALIR

	-- Actualizamos SubServicio
	UPDATE Tb_SubServiciosAgentes SET FechaAlta = @Fecha1, FechaTermino = @FechaTermino WHERE IdSubServicio = @IdSubServicio
	SELECT @Error = @@ERROR
	IF @Error <> 0
		GOTO SALIR

	-- Agregar control para no actualizar Normas si es que no corresponde - para Servicio y Subsercio
	IF @Norma IS NOT NULL 
	    BEGIN
		SET @NormaAltaAnterior = NULL
		SELECT @NormaAltaAnterior = RTRIM(Descripcion) FROM Tb_ServiciosAgentes SA
			INNER JOIN Tb_Normas Normas ON Normas.IdNorma = SA.Normaalta
			WHERE SA.IdServicioAgente = @Servicio

		UPDATE Tb_ServiciosAgentes SET  NormaAltaAnteriores=IsNULL(NormaAltaAnteriores,'')+'-'+@NormaAltaAnterior, NormaAlta = @Norma  WHERE IdServicioAgente = @Servicio
		SELECT @Error = @@ERROR
		IF @Error <> 0
			GOTO SALIR
		UPDATE Tb_SubServiciosAgentes SET  NormaAltaAnterior=NormaInicio, NormaInicio = @Norma  WHERE IdSubServicio = @IdSubServicio
		SELECT @Error = @@ERROR
		IF @Error <> 0
			GOTO SALIR
 	    END 
  END

-- Actualizo Cola de Movimiento
UPDATE tb_ColaDeMovimientos SET Estado = CASE WHEN @EsForzado = 0 THEN 4 ELSE 5 END, NTUserEjecutor = SYSTEM_USER, FechaEjecucion = GETDATE()  WHERE idCola = @idCola
SELECT @Error = @@ERROR
IF @Error <> 0
	GOTO SALIR

SELECT @SubServicioDeLaNorma = @IdSubServicio

SALIR:
IF @Error = 0
	COMMIT TRANSACTION tranRectificarAltaDeServicios
ELSE
	ROLLBACK TRANSACTION tranRectificarAltaDeServicios



/*

  BEGIN
      -- Si existen novedades posteriores en el servicio
      IF EXISTS(SELECT TOP 1 ServicioAgente FROM tb_SubServiciosAgentes WHERE ServicioAgente = @Servicio and FechaAlta > @FechaAlta) 
         BEGIN
	DECLARE @idssa INT 
	SET @IdSSA = Null 
	DECLARE @FAltaA DATETIME
	DECLARE @FBajaA DATETIME
	DECLARE @SitLabA INT
	DECLARE @SitExtA INT
	DECLARE @normaaltaanterior VARCHAR(10)
	SELECT  @idssa = idsubServicio, @FAltaA = FechaAlta, @FBajaA=FechaBaja, @sitlaba = situacionlaboral, @sitexta = situacionextraordinaria FROM tb_SubserviciosAgentes WHERE ServicioAgente =  @Servicio and DATEADD(DAY,1,@FechaBaja) = FechaAlta
	SELECT @normaaltaanterior = descripcion FROM tb_ServiciosAgentes, tb_Normas WHERE idServicioAgente = @Servicio and normaalta = idNorma
	-- Si no se supera la fecha de alta de un subservicio que no es normal
	IF DATEADD(DAY,1,@fecha1) < @FAltaA and @sitlaba <> 5 and @sitexta <> 1
	  BEGIN
		UPDATE tb_SubServiciosAgentes SET FechaAlta = @Fecha1, NormaInicio = @NormaAlta, NormaFin = @NormaBaja WHERE idSubServicio = @idSubServicio
		SELECT @Error = @@ERROR
		IF @Error <> 0
			GOTO SALIR

		UPDATE tb_ServiciosAgentes SET FechaAlta = @Fecha1, situacionrevista = @sitrev, horas = @cantidadhoras, normaaltaanteriores=IsNULL(normaaltaanteriores,'')+'-'+@normaaltaanterior, NormaAlta = @NormaAlta, NormaBaja = @NormaBaja WHERE idServicioAgente = @Servicio	
		SELECT @Error = @@ERROR
		IF @Error <> 0
			GOTO SALIR
	  END
	ELSE
		IF @sitlabA = 5 and @sitExtA = 1
		  BEGIN
			IF @Fecha1 < @FAltaA
			  BEGIN
				UPDATE tb_SubServiciosAgentes SET FechaAlta = @Fecha1, NormaInicio = @NormaAlta, NormaFin = @NormaBaja WHERE idSubServicio = @idSubServicio
				SELECT @Error = @@ERROR
				IF @Error <> 0
					GOTO SALIR

				UPDATE tb_ServiciosAgentes SET FechaAlta = @Fecha1,  situacionrevista = @sitrev, horas = @cantidadhoras, normaaltaanteriores=IsNULL(normaaltaanteriores,'')+'-'+@normaaltaanterior, NormaAlta = @NormaAlta, NormaBaja = @NormaBaja WHERE idServicioAgente = @Servicio
				SELECT @Error = @@ERROR
				IF @Error <> 0
					GOTO SALIR
			  END
			IF @Fecha1 > @FAltaA and @Fecha1 < @FBajaA
			  BEGIN
				DELETE tb_SubServiciosAgentes  WHERE idSubServicio = @idssa
				SELECT @Error = @@ERROR
				IF @Error <> 0
					GOTO SALIR

				UPDATE tb_SubServiciosAgentes SET FechaAlta = @Fecha1, FechaBaja=@FBajaA WHERE idSubServicio = @idsubServicio
				SELECT @Error = @@ERROR
				IF @Error <> 0
					GOTO SALIR

				--Falta hacer Update del Servicio
			  END
		  END			
         END
      ELSE
        BEGIN
		UPDATE tb_SubServiciosAgentes SET FechaAlta = @Fecha1, NormaInicio = @NormaAlta, NormaFin = @NormaBaja WHERE idSubServicio = @idSubServicio
		SELECT @Error = @@ERROR
		IF @Error <> 0
			GOTO SALIR
		UPDATE tb_ServiciosAgentes SET FechaAlta = @Fecha1, situacionrevista = @sitrev, horas = @cantidadhoras, normaaltaanteriores=IsNULL(normaaltaanteriores,'')+'-'+@normaaltaanterior, NormaAlta = @NormaAlta, NormaBaja = @NormaBaja  WHERE idServicioAgente = @Servicio
		SELECT @Error = @@ERROR
		IF @Error <> 0
			GOTO SALIR
        END
  END

--Por ahora actualiza siempre
SELECT @IdSubServicio = IdSubServicio FROM tb_SubServiciosAgentes WHERE ServicioAgente = @Servicio AND @Fecha1 BETWEEN FechaAlta AND ISNULL(FechaBaja, @Fecha1)


UPDATE tb_SubServiciosAgentes SET FechaAlta = @Fecha1, NormaInicio = @Norma, NormaFin = @NormaBaja WHERE idSubServicio = @idSubServicio
SELECT @Error = @@ERROR
IF @Error <> 0
	GOTO SALIR

-- Agregar control para no actualizar Normas cuando no corresponde 10-05-2007
IF @Norma IS NOT NULL 
	BEGIN
		UPDATE tb_ServiciosAgentes SET  NormaAlta = @Norma  WHERE idServicioAgente = @Servicio
		SELECT @Error = @@ERROR
		IF @Error <> 0
			GOTO SALIR
	END 
IF @NormaBaja IS NOT NULL 
	BEGIN
		UPDATE tb_ServiciosAgentes SET NormaBaja = @NormaBaja  WHERE idServicioAgente = @Servicio
		SELECT @Error = @@ERROR
		IF @Error <> 0
			GOTO SALIR
	END

-- Agregado Update de a Titularizar por Rectificacion 13-06-2006
-- Agregado CausaAlta =@CausaAlta  10-05-2007
-- Se saco NormaAlta y NormaBaja por actualizacion individual
--UPDATE tb_ServiciosAgentes SET CausaAlta =@CausaAlta ,FechaAlta = @Fecha1, SituacionRevista = @SitRev, Horas = @CantidadHoras, NormaAlta = @Norma, EstaEnProcesoDeTitularizacion=@MovimientoATitularizar, NormaBaja = @NormaBaja  WHERE idServicioAgente = @Servicio
UPDATE tb_ServiciosAgentes SET CausaAlta =@CausaAlta, FechaAlta = @Fecha1, SituacionRevista = @SitRev, Horas = @CantidadHoras,  EstaEnProcesoDeTitularizacion=@MovimientoATitularizar  WHERE idServicioAgente = @Servicio
SELECT @Error = @@ERROR
IF @Error <> 0
	GOTO SALIR



*/
GO
GRANT EXECUTE ON  [dbo].[paEjecutarRectificacionAltaDeServicio] TO [PersonalDocente]
GO
